package com.empire.module.member.dal.dataobject.user;

import com.empire.framework.ip.core.Area;
import com.empire.framework.mybatis.core.dataobject.BaseWithDeptDO;
import com.empire.framework.mybatis.core.type.LongListTypeHandler;
import com.empire.framework.tenant.core.db.TenantBaseDO;
import com.empire.module.member.dal.dataobject.group.MemberGroupDO;
import com.empire.module.system.enums.common.SexEnum;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 人员 DO
 *
 * @author 未来源码
 */
@TableName(value = "member_user", autoResultMap = true)
@KeySequence("member_user_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MemberUserDO extends BaseWithDeptDO {

    // ========== 账号信息 ==========

    /**
     * 用户ID
     */
    @TableId
    private Long id;

    /**
     * 用户昵称
     */
    private String nickname;
    /**
     * 用户头像
     */
    private String avatar;

    /**
     * 真实名字
     */
    private String name;
    /**
     * 性别
     *
     * 枚举 {@link SexEnum}
     */
    private Integer sex;
    /**
     * 出生日期
     */
    private LocalDateTime birthday;
    /**
     * 所在地
     *
     * 关联 {@link Area#getId()} 字段
     */
    private Integer areaId;
    /**
     * 用户备注
     */
    private String mark;

    // ========== 其它信息 ==========

    /**
     * 会员标签列表，以逗号分隔
     */
    @TableField(typeHandler = LongListTypeHandler.class)
    private List<Long> tagIds;

    /**
     * 人员管控单位列表，以逗号分隔
     */
    private Long deptId;

    /**
     * 人员管控单位列表，以逗号分隔
     */
    private String deptName;
    /**
     * 用户分组编号
     *
     * 关联 {@link MemberGroupDO#getId()} 字段
     */
    private Long groupId;
    /**
     * 身份证号码
     */
    private String idcard;
    /**
     * 国家
     */
    private String country;
    /**
     * 国籍/民族
     */
    private String nation;
    /**
     * 备注
     */
    private String remark;
    /**
     * 电话号码
     */
    private String phoneNumber;
    /**
     * 车牌号码
     */
    private String carNumber;
    /**
     * 护照号
     */
    private String passportNumber;
    /**
     * 宗教信仰
     */
    private String faith;
    /**
     * 外文姓
     */
    private String enFirstName;
    /**
     * 外文名
     */
    private String enSecondName;
    /**
     * 居住地
     */
    private String liveAddress;
    /**
     * 户籍地
     */
    private String birthPlace;
    /**
     * 是否外国人 1-是 2-不是
     */
    private Integer foreigner;

    /**
     * 入杭次数，比如1次入杭，2次入杭
     */
    private String inHangZhouTagTime;

    /**
     * 入杭次数数字，比如1，2
     */
    private Integer inHangZhouTagTimeNumber;
}
